iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 28
1

前言

本文將介紹LINQPad的基本使用情境。

同步發表於個人點部落 - [鐵人賽Day28] ASP.Net Core MVC 進化之路 - 工具篇(2) / LINQPad神器

LINQPad


(圖片來源:https://www.linqpad.net/)

LINQ(Language Integrate Query)為C#特有的一種整合式查詢語法,
內容大量使用委派(delegate)機制達到操作簡潔的效果。
可解決各資料來源查詢方式不一的問題,
關於LINQ的部份本篇不會介紹太多,
有需要的讀者請參考其他網路上的文件。
LINQPad是一位微軟 MVP 所開發微軟釋出的免費工具,
提供使用LINQ查詢語法與資料庫互動的介面,
讓初學LINQ的人可以「還不熟C#就先學LINQ」。

講了落落長我們先到官網下載工具,
官方有提供免費版及付費版,
免費版本中必須什麼都自己Hand Code
在付費版中有提供NuGetIntellisense等功能,
其餘功能差異如下表。

下載完畢後請執行安裝(略),
安裝完畢後請打開LINQPad
在開始之前請先準備一個練習用的資料庫,
筆者下面會使用localdb中的Northwind進行操作,
打開後請先點選左上方的Add connection

開啟後點選上方的Default(LINQ to SQL)

接下來的頁面會請你設定資料庫的連接位置,
如果你有MDF資料檔也可以掛上去當作測試DB,
下方的選項會決定你的TableProperty命名的單複數,
也可載入資料庫的預存程序(Store Procedure),
填入相關資訊之後按OK繼續。

載入之後會看到跟資料庫很像的Table結構,
但其實它是幫你使用ORM生成裝載資料的類別(只是你看不到)。

點選Table右鍵有許多預設的方式可供使用,
基本上功能相當完整,
就跟使用SSMS(SQL Server Management Studio)一樣。

接著介紹右上方Language部分,
LINQPad支援**C#、VB、F#**三種語言及原生SQL語法
筆者僅針對C#部分作介紹。

以下針對三種模式及使用情境作介紹。

C# Expression

僅能使用單行表達式,通常會在練習LINQ或查詢簡單條件資料的時候使用。

[情境]  查詢資料庫中生日(BirthDate)大於1960年1月1日的員工(Employees)資訊

這邊要特別介紹一個很好用的地方,
當你的資料表之間有建立關聯時,
它會幫你將有關聯到的資料包裝成超連結的形式,
透過點選超連結即可快速查看有關聯的資料
光這點我就已經愛不釋手了!
執行結果如下圖。

點選後會展開對應的關聯資料。

C# Statement(s)

當查詢條件比較複雜時可以改用Statement(s)的陳述方式,
這邊可以允許輸入多行的程式碼進行運算,
但不能使用自訂類別及方法。

[情境]:查詢員工中FirstName為Michael者(簡單字串拆解)

這邊我們可以撰寫多行的程式碼
筆者個人覺得對初學者練習上很有幫助!
除了資料觀看方便以外,
可以練習盲打的功力(是好處也是壞處XD),
而且不用建立一堆練習用的Console App
但這邊要使用Dump()將想呈現的資料印出來,
有點類似Console.WriteLine()的概念。

這個功能看似平凡無奇,
但在部分老舊開發中的系統,
針對「無法完善」或「尚未完善」的功能,
你可以直接使用LINQPad當作簡單的後台操作。

例如我可以針對考試系統的某個科目,
以某個公式調整所有的同學的成績,
諸如此類等等!

C# Program

雖然Statement的功能相當實用,
但我偶爾還是會用到Program的部分,
因為在這邊我可以自訂方法類別
例如在撰寫ViewModel的組合及資料處理會在Services層中進行,
當一段與資料互動的邏輯寫的不夠清楚時,
我會使用LINQPad幫助我從資料結果中發現錯誤,
基本操作如下圖。

以下示範將多張Table組成ViewModel的方式。

最後補充一下,
LINQ雖然是一種很方便的查詢語法,
但使用方式錯誤會導致系統速度嚴重被拖垮,
LINQPad中可以觀察你所下的LINQ轉換成的SQL語法
在查找效能瓶頸時很有幫助。

有關LINQPad的基礎使用就介紹到這邊,
不要再把這麼強的工具當練習品看待了!


上一篇
[鐵人賽Day27] - 工具篇(1) / 將網站發布到Azure上
下一篇
[鐵人賽Day29] - 工具篇(3) / Azure DevOps
系列文
菜鳥練等區-ASP.Net Core MVC進化之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言